/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modules.enderecamento.bo;

import java.util.List;
import modules.enderecamento.exception.EspacoExcedidoPaleteException;
import modules.enderecamento.exception.EspacoExcedidoRuaException;
import modules.enderecamento.exception.PaleteNaoEnderecadoException;
import modules.enderecamento.exception.PaleteOcupadoException;
import modules.enderecamento.models.dao.PaleteDAO;
import modules.enderecamento.models.dto.Palete;
import modules.enderecamento.models.dto.Produto;
import modules.enderecamento.models.dto.Rua;
import modules.enderecamento.util.BoxPanel;
import modules.enderecamento.util.Funcoes;
import modules.enderecamento.validation.Validation;
import org.hibernate.ObjectNotFoundException;

/**
 *
 * @author Clezio
 */
public class PaleteBO {
    public boolean save(Palete palete) throws EspacoExcedidoPaleteException{
        try{
            Validation.getInstance().valid(palete);
            if(Validation.getInstance().hasErrors()){
                BoxPanel.showMessageError(Funcoes.getListErros(Validation.getInstance().getErros()));
                return false;
            }else{
                new PaleteDAO().save(palete);
                return true;
            }
        }catch(EspacoExcedidoPaleteException e){
            throw e;
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Não foi possível salvar Palete. Por favor, tente novamente.");
            Funcoes.registrarLog(e);
        }
        return false;
    }

    public List<Palete> getList(String sql){
        try{
            return new PaleteDAO().getList(sql);
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Não foi possível listar Paletes.");
            Funcoes.registrarLog(e);
        }
        return null;
    }

    public Palete retrieve(Integer pk){
        try{
            return new PaleteDAO().retrieve(pk);
        }catch(ObjectNotFoundException e){

        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Palete não encontrado");
            Funcoes.registrarLog(e);
        }
        return null;
    }

    public boolean delete(Palete palete){
        try{
            if(BoxPanel.showConfirmDialog(null, "Deseja realmente excluir o registro?") == 0){
                new PaleteDAO().delete(palete);
                return true;
            }
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Não foi possível excluir Palete.");
            Funcoes.registrarLog(e);
        }
        return false;
    }

    public boolean moverPalete(Palete palete, Rua ruaDestino) throws EspacoExcedidoRuaException {
        palete.setRua(ruaDestino);
        try{
            new PaleteDAO().moverPalete(palete);
            return true;
        }catch(EspacoExcedidoRuaException e){
            throw e;
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Não foi possível mover Palete.");
            Funcoes.registrarLog(e);
        }
        return false;
    }

    public List<Palete> getListPaleteEnderecadoVazio() {
        try{
            return new PaleteDAO().getListPaleteEnderecadoVazio();
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Não foi possível listar Paletes.");
            Funcoes.registrarLog(e);
        }
        return null;
    }

    public boolean removerPaleteVazio(Palete palete) throws PaleteOcupadoException, PaleteNaoEnderecadoException {
        try{
            new PaleteDAO().removerPaleteVazio(palete);
            return true;
        }catch(PaleteOcupadoException e){
            throw e;
        }catch(PaleteNaoEnderecadoException e){
            throw e;
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Não foi possível remover Palete.");
            Funcoes.registrarLog(e);
        }
        return false;
    }
}
